package com.study.spmongodb.book.wwj.char01;

/**
 * @author MI
 * @version 1.0
 * @date 2020/11/23 20:59
 */
public class TemplateMethod {
    public final void print(String message) {
        System.out.println("#############");
        wrapPrint(message);
        System.out.println("#############");
    }

    /**
     * print方法类似于Thread的start方法，而wrapPrint则类似于run方法。这样丛的好处是
     * 程序结构由父类控制，并且是final修饰的，不允许被重写，之类只需要实现想要的逻辑任务即可
     */
    protected void wrapPrint(String message) {
    }

    public static void main(String[] args) {
        final TemplateMethod t1 = new TemplateMethod() {
            @Override
            protected void wrapPrint(String message) {
                System.out.println("*" + message + "*");
            }
        };
        t1.print("hello Thread");
        final TemplateMethod t2 = new TemplateMethod() {
            @Override
            protected void wrapPrint(String message) {
                System.out.println("*" + message + "*");
            }
        };
        t2.print("hello Thread");
    }
}
